import axios from 'axios'

/**
 * axios 实例
 *  配置： 默认配置
 */
const instance = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL,
  timeout: 1000,
  headers: {
    'Content-type': 'application/x-www-form-urlencoded',
  },
})

instance.interceptors.request.use(
  config => {
    // const TOKEN = store.getters.userInfo.token
    // if (TOKEN) {
    //   config.headers.Authorization = TOKEN
    // }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

instance.interceptors.response.use(
  response => {
    console.log(JSON.stringify(response))
    if (response.status === 200) {
      if (response.data.resultCode) {
        return Promise.resolve(response.data.data)
      } else {
        this.$Message['error']({
          background: true,
          content: response.data.resultMsg,
        })
      }
    } else {
      this.$Message['error']({
        background: true,
        content: response.data.resultMsg,
      })
    }
  },
  error => {
    console.log('响应拦截器错误', error)
    this.$Message['error']({
      background: true,
      content: error.data.resultMsg,
    })
  }
)

/**
 * 封装http请求
 *
 * @author zhangpeng/2435814618@qq.com
 * @since 2022/3/13
 */
export class HttpClient {
  /**
   * http get请求
   *
   * @param {String} url http 请求 url， 例：https://www.baidu.com
   * @param {Object} params  请求参数，会拼接到request parameter中
   * @param {*} config 配置信息
   * @returns promise
   */
  static get(url, params = {}, config = {}) {
    return new Promise((resolve, reject) => {
      instance
        .get(url, { params: params }, config)
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  }

  /**
   * http post请求
   *
   * @param {String} url http 请求 url， 例：https://www.baidu.com
   * @param {Object} data  请求参数 request body
   * @param {*} config 配置信息
   * @returns promise
   */
  static post(url, data = {}, config = {}) {
    return new Promise((resolve, reject) => {
      instance
        .post(url, data, config)
        .then(res => {
          return resolve(res)
        })
        .catch(err => {
          return reject(err)
        })
    })
  }

  /**
   * http delete请求
   *
   * @param {String} url http 请求 url， 例：https://www.baidu.com
   * @param {Object} params  请求参数，会拼接到request parameter中
   * @param {*} config 配置信息
   * @returns promise
   */
  static delete(url, params = {}, config = {}) {
    return new Promise((resolve, reject) => {
      instance
        .delete(url, params, config)
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  }

  /**
   * http head请求
   *
   * @param {String} url http 请求 url， 例：https://www.baidu.com
   * @param {Object} params  请求参数，会拼接到request parameter中
   * @param {*} config 配置信息
   * @returns promise
   */
  static head(url, params = {}, config = {}) {
    return new Promise((resolve, reject) => {
      instance
        .head(url, params, config)
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  }

  /**
   * http put请求
   *
   * @param {String} url http 请求 url， 例：https://www.baidu.com
   * @param {Object} data  请求参数 request body
   * @param {*} config 配置信息
   * @returns promise
   */
  static put(url, data = {}, config = {}) {
    return new Promise((resolve, reject) => {
      instance
        .put(url, data, config)
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  }

  /**
   * @description http patch请求
   *
   * @param {String} url http 请求 url， 例：https://www.baidu.com
   * @param {Object} data  请求参数 request body
   * @param {*} config 配置信息
   * @returns promise
   */
  static patch(url, data = {}, config = {}) {
    return new Promise((resolve, reject) => {
      instance
        .patch(url, data, config)
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  }
}
